package org.jeecg.modules.rooms.controller;


import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.EnumUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.Enum.ResultCode;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.rooms.DTO.CesRoomLayoutPriceDto;
import org.jeecg.modules.rooms.DTO.CesRoomLayoutPriceSearchDto;
import org.jeecg.modules.rooms.Enum.CouponEnums;
import org.jeecg.modules.rooms.entity.CesRoomLayoutMemberPrice;
import org.jeecg.modules.rooms.entity.CesRoomLayoutPrice;
import org.jeecg.modules.rooms.service.CesRoomLayoutMemberPriceServiceImpl;
import org.jeecg.modules.rooms.service.CesRoomLayoutPriceServiceImpl;
import org.jeecg.modules.rooms.service.CesRoomPricePlanServiceImpl;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author fendo
 * @since 2023-03-06
 */
@RestController
@RequestMapping("/rooms/cesRoomLayoutPrice")
@Api(tags="ces_room_layout_price")
@Slf4j
public class CesRoomLayoutPriceController extends JeecgController<CesRoomLayoutPrice, CesRoomLayoutPriceServiceImpl> {

    @Resource
    private CesRoomLayoutPriceServiceImpl roomLayoutPriceService;

    @ApiOperation(value="获取房型的所有价格数据", notes="获取房型的所有价格数据")
    @GetMapping(value = "/list")
    public Result list(CesRoomLayoutPriceSearchDto searchDto){
        if(StringUtils.isBlank(searchDto.getHotelId())){
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(StringUtils.isBlank(searchDto.getRoomLayoutId())){
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(searchDto.getType().intValue() <= 0){
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(searchDto.getPageNo().intValue() <= 0){
            return Result.error("页数不能小于等于0");
        }
        if(searchDto.getPageSize().intValue() < 10){
            return Result.error("分页条数不能小于10");
        }
        try{
            return  roomLayoutPriceService.list(searchDto);
        }catch (Exception e){
            return Result.error(e.getMessage());
        }
    }


    /**
     * 创建房型价格数据
     * @param dto
     * @return
     */
    @ApiOperation(value="创建房型价格数据", notes="创建房型价格数据")
    @PostMapping(value = "/create")
    public Result create(@RequestBody CesRoomLayoutPriceDto dto){
        if(StringUtils.isBlank(dto.getName())){ //价格名称
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(BigDecimal.ZERO.compareTo(dto.getOprice()) == 0){//原价
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(BigDecimal.ZERO.compareTo(dto.getPrice()) == 0){//现价
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getType() != null && dto.getType().intValue() != 0) {//类型
            List<Object> codes = EnumUtil.getFieldValues(CouponEnums.RoomLayoutPriceTypeEnum.class, "code");
            if(!codes.contains(dto.getType().intValue())){
                return Result.error("参数不正确!请传入正确的房间价格类型!");
            }
        }else{
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getIsVip().intValue() == org.jeecg.common.Enum.CouponEnums.TRUEORFALSE.TRUE.code()){//是否vip折扣
             //验证会员价格数据
              if(CollectionUtil.isEmpty(dto.getMemberPriceEntities())) return Result.error("会员价格数据必填，请重新填入!");
        }
        if(dto.getPrepay().intValue() < 0 || dto.getPrepay().intValue() > 1){//预付
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getIntegral() < 0){
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getNum() < 0){
            return Result.error(ResultCode.PARAM_MISS);
        }
        //不同类型的房型 需要不同的验证
        if(CouponEnums.RoomLayoutPriceTypeEnum.HOUR.code() == dto.getType().intValue()){
            //需要验证开始时间结束时间 以及 钟点房方案ID
            if(StringUtils.isBlank(dto.getStartDate())){
                return Result.error(ResultCode.PARAM_MISS,"钟点房开始时间不能为空!");
            }
            if(StringUtils.isBlank(dto.getEndDate())){
                return Result.error(ResultCode.PARAM_MISS,"钟点房结束时间不能为空!");
            }
        }
        try{
            return roomLayoutPriceService.createRoomLayoutPrice(dto);
        }catch (Exception e){
            return Result.error(e.getMessage());
        }
    }


    /**
     * 创建房型价格数据
     * @param dto
     * @return
     */
    @ApiOperation(value="修改房型价格数据", notes="修改房型价格数据")
    @PostMapping(value = "/modify")
    public Result modify(@RequestBody CesRoomLayoutPriceDto dto){
        if(StringUtils.isBlank(dto.getId())){
            return Result.error(ResultCode.PARAM_MISS,"数据ID必传入!");
        }
        if(StringUtils.isBlank(dto.getName())){ //价格名称
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(BigDecimal.ZERO.compareTo(dto.getOprice()) == 0){//原价
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(BigDecimal.ZERO.compareTo(dto.getPrice()) == 0){//现价
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getType() != null && dto.getType().intValue() != 0) {//类型
            List<Object> codes = EnumUtil.getFieldValues(CouponEnums.RoomLayoutPriceTypeEnum.class, "code");
            if(!codes.contains(dto.getType().intValue())){
                return Result.error("参数不正确!请传入正确的房间价格类型!");
            }
        }else{
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getIsVip().intValue() == org.jeecg.common.Enum.CouponEnums.TRUEORFALSE.TRUE.code()){//是否vip折扣
            //验证会员价格数据
            if(CollectionUtil.isEmpty(dto.getMemberPriceEntities())) return Result.error("会员价格数据必填，请重新填入!");
        }
        if(dto.getPrepay().intValue() < 0 || dto.getPrepay().intValue() > 1){//预付
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getIntegral() < 0){
            return Result.error(ResultCode.PARAM_MISS);
        }
        if(dto.getNum() < 0){
            return Result.error(ResultCode.PARAM_MISS);
        }
        //不同类型的房型 需要不同的验证
        if(CouponEnums.RoomLayoutPriceTypeEnum.HOUR.code() == dto.getType().intValue()){
            //需要验证开始时间结束时间 以及 钟点房方案ID
            if(StringUtils.isBlank(dto.getStartDate())){
                return Result.error(ResultCode.PARAM_MISS,"钟点房开始时间不能为空!");
            }
            if(StringUtils.isBlank(dto.getEndDate())){
                return Result.error(ResultCode.PARAM_MISS,"钟点房结束时间不能为空!");
            }
            if(StringUtils.isBlank(dto.getSellerId())){
                return Result.error(ResultCode.PARAM_MISS,"钟点房房价方案不能为空!");
            }
        }
        try{
            return roomLayoutPriceService.modifyRoomLayoutPrice(dto);
        }catch (Exception e){
            return Result.error(e.getMessage());
        }
    }

    @ApiOperation(value="逻辑删除房型价格数据", notes="逻辑删除房型价格数据")
    @PostMapping(value = "/delete")
    public Result delete(@RequestBody CesRoomLayoutPriceDto dto){
        if(StringUtils.isBlank(dto.getId())){
            return Result.error(ResultCode.PARAM_MISS,"数据ID必传入!");
        }
        try{
            return  roomLayoutPriceService.deleteRoomLayoutPrice(dto);
        }catch (Exception e){
            return Result.error(e.getMessage());
        }
    }










}

